Technical Q&A QA1246
Can I have parameters of type typeHIRect instead of type typeQDRectangle in my kEventControlBoundsChanged message handler?


Q: kEventControlBoundsChanged メッセージハンドラで、型が typeQDRectangle ではなく、常に typeHIRect のパラメータを取得して、毎回変換しなくてすむようにする方法はありますか?

A: ヘッダにはまだ記されていませんが、実はできます。Mac OS X 10.2(Jaguar)に導入された新しい型 typeHIRect に対して自動変換が発生するため、型が typeQDRectangle のパラメータ(kEventControlGetOptimalBounds、kEventControlGetPartBounds など)を取得または設定する Carbon Event メッセージハンドラにはすべて、代わりに型 typeHIRect を要求できます(逆の場合も同様です)。

次のようなコードを取得していた場合は、



リスト 1 typeQDRectangle パラメータの取得


Rect currentBounds;

GetEventParameter(theEvent, kEventParamCurrentBounds, typeQDRectangle,

                  NULL, sizeof(Rect), NULL, &currentBounds);



代わりに、次のように記述できるようになりました。



リスト 2 typeHIRect パラメータの取得


HIRect currentHIBounds;

GetEventParameter(theEvent, kEventParamCurrentBounds, typeHIRect,

                  NULL, sizeof(HIRect), NULL, &currentHIBounds);



Rect と HIRect の間の変換を自分で行う必要はありません。

もう 1 つの自動変換が同様に、型 typeQDPoint と型 typeHIPoint 間で行われ、さらに、CFBoolean 型がイベントに追加される場合は、(typeCFType の代わりに)typeBoolean としてデータを受け取るという要請が自動的に受け入れられます。


[2003 年 4 月 3 日]